package com.线程Thread;

public class Thread01 {  //继承Thread类创建线程
    /**  运行结果展示；                     创建的DOG线程不会阻塞主线程（当开了一个线程后，主线程不会等子线程跑完，而是会一起执行  -- 并行）
     *main0  -- main线程的名字为main
     * DOG1  --  线程的名字为Thread-0
     * DOG2  --  线程的名字为Thread-0
     * main1  -- main线程的名字为main
     * DOG3  --  线程的名字为Thread-0
     * main2  -- main线程的名字为main
     * main3  -- main线程的名字为main
     * DOG4  --  线程的名字为Thread-0
     * main4  -- main线程的名字为main
     * DOG5  --  线程的名字为Thread-0
     * main线程结束                          main线程结束进程不会立马停止，会等所有线程结束后进程才停止
     * DOG6  --  线程的名字为Thread-0         主线程结束了 而 子线程还在跑
     * DOG7  --  线程的名字为Thread-0
     * DOG8  --  线程的名字为Thread-0
     * Dog线程结束                            当所有线程结束了进程才会终止；
     * 进程已结束，退出代码为 0
     */
    public static void main(String[] args) throws InterruptedException {
        DOG dog = new DOG();
        dog.start();  //启动线程后不会等子线程执行完，而是当前线程会继续执行，子线程也在同时进行着；
        /** 这里不用dog.run（）的原因：
         *  如果用dog.start()表示开一个线程再调用run方法，不会导致主线程阻塞；
         *  如果用dog.run（）表示就调用了个dog的普通方法，而不是开线程，会等该方法执行完后再执行主线程；导致阻塞；
         * */

        for (int i = 0; i < 5; i++) {
            System.out.println("main"+i+"  -- main线程的名字为"+Thread.currentThread().getName());
            Thread.sleep(1000);
        }
        System.out.println("main线程结束");
    }
}

class DOG extends Thread{
    @Override
    public void run() {

        int count = 0;
        while(count != 8){
            count++;
            System.out.println("DOG"+count+"  --  线程的名字为"+Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        System.out.println("Dog线程结束");
    }
}